package basis;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * 求数组最大值，平均值，简单排序，求阶乘累加
 * 
 * @author 71936_000
 * 
 */
public class Demo3_Array {

	Random random = new Random();
	Scanner sc = new Scanner(System.in);
	int i = sc.nextInt();
	int[] str = new int[i];

	public static void main(String[] args) {
		System.out.println("请输入你想要产生的数组的长度");
		Demo3_Array demo3 = new Demo3_Array();
		demo3.createArray();
		demo3.max(); // 最大值
		demo3.ayerage(); // 平均值
		demo3.sort(); // 快速排序
		demo3.bubbleSort(); // 冒泡排序
		demo3.selectSort(); // 选择排序
		demo3.factorlal(); // 阶乘累加
	}

	// 最大值
	public void max() {
		int x = 0;
		for (int q = 0; q < str.length; q++) {
			if (str[q] > x) {
				x = str[q];
			}
		}
		System.out.println("该数组中最大的值为" + x);
	}

	// 平均值
	public void ayerage() {
		int num = 0;
		for (int q = 0; q < str.length; q++) {
			num = num + str[q];
		}
		int avg = num / str.length;
		System.out.println("该数组的平均值为" + avg);
	}

	// 排序--快速排序
	public void sort() {
		Arrays.sort(str);
		System.out.println(Arrays.toString(str));
	}

	// 排序--冒泡排序
	public void bubbleSort() {
		for (int x = 0; x < str.length - 1; x++) {
			for (int y = x + 1; y < str.length; y++) {
				if (str[x] < str[y]) {
					int j = str[y];
					str[y] = str[x];
					str[x] = j;
				}
			}
		}
		System.out.println(Arrays.toString(str));
	}

	// 排序--选择排序
	public void selectSort() {
		for (int x = 0; x < str.length - 1; x++) {
			int main = x;
			for (int y = x + 1; y < str.length; y++) {
				if (str[main] > str[y]) {
					main = y;
				}
			}
			if (main != x) {
				int j = str[x];
				str[x] = str[main];
				str[main] = j;
			}
		}
		System.out.println(Arrays.toString(str));
	}

	// 随机产生一个长度为n的数组
	public void createArray() {
		for (int j = 0; j < i; j++) {
			str[j] = random.nextInt(100);
		}
		System.out.println(Arrays.toString(str));
	}

	// 阶称累加
	public void factorlal() {
		System.out.println("请输入累加几的阶乘");
		int x = sc.nextInt();
		int num = 0;

		for (int y = x; y >= 1; y--) { // 控制阶乘累加
			int q = 1;
			for (int p = 1; p <= y; p++) { // 阶乘
				q = p * q;
			}
			num += q;
		}
		System.out.println(num);
	}
}
